WebSockets Vulnerability

WebSockets Nedir?

Modern web sitelerinde, bağlantılarını http üzerinden başlatan, çift yönlü iletişim protokolüdür(Layer7). HTTP istek yapar ve cevap alır websockets protokolü ise devamlı bir bağlantı sağlayarak httpdeki istek ve cevap arasında yaşanan beklemeler yüzünden kesintiler yaşanmaz. Örnek verelim bir görüntülü konuşmada her şey anlıktır istek cevap süresi yoktur veya bir borsa da crypto  fiyat takibi yaparken veriler sürekli gelir bir istek cevap yoktur devamlı bir bağlantı sağlar.

İstemci aşağıdaki gibi bir WebSocket el sıkışma isteği gönderir:

 

GET /chat HTTP/1.1

Host: xx.alperencoskun.com

Sec-WebSocket-Version: 13

Sec-WebSocket-Key: vcOuKtsiLcJhhYihL4Pc9wB==

Connection: keep-alive, Upgrade

Cookie: session= nvbYF9tEijeE2PTsEJNuasw4Rd9BPNr8

Upgrade: websocket

 

Sunucu bağlantıyı kabul ederse, aşağıdaki gibi bir WebSocket el sıkışma yanıtı döndürür:

 

HTTP/1.1 101 Switching Protocols

Connection: Upgrade

Upgrade: websocket

Sec-WebSocket-Accept: 0FFP+8ThFIf/h+2VP85f1uzrYSk=

 

WebSockets Vulnerability Nedir Nasıl Test Edilir?

WebSockets protokolü doğru yapılandırılmadığı zaman aslında bir çok açığa kapı açar. Bunlar arasında doğrulama zafiyetleri, sniffing saldırıları, iletileri değiştirme (xss, sql vs.), csrf gibi bir çok zafiyete sebep olabilir. Ayrıca istemci ile sunucu arasında devamlı bir bağlantı bulunması sunucunun daha fazla efor sarfetmesine neden olduğundan Dos açıklarını da beraberinde getirir.

Bunları daha iyi anlamak için PortSwigger labaratuvarından birkaç örnek ile açıklayalım.

image

Burada açılan mağza sayfasında canlı destek ile iletişime geçmemiz gerektiğini ve mesajları manipüle ederek xss çalıştırmamız istenmiş. Access the lab dedikten sonra Live chat seçeneğine tıklıyoruz.

image

Yukarıda WebSockets bağlantısı oluşması için bir mesaj yazıyoruz ve bağlantı kuruyoruz.

image

İkinici mesajda yukarıdaki gibi websockets paketi görüyoruz. Biz burada bir manipüle kodu ekleyeceğiz.

image

Burada mesaj kısmında kod çalıştırmayı deniyoruz. Bu kısımda websockets bağlantısının kopmaması için hazırda kodumuz bulunması gerekiyor . Yukarıdaki gibi paketi yolladığımızda manipüle etmiş oluyoruz.

image

 

Bununla ilgili farklı bir labını çözelim.

 

image

Burada bize yine bir xss zafiyeti yapacağımızı fakat kusurlu bir filitreye sahip olduğunu söylüyor.

Aynı şekilde lab a bağlandıktan sonra Live Chat diyoruz ve bir mesaj yazarak websockets bağlantısını başlatmış oluyoruz.

image

Şekildeki gibi tekrar bir kod yollamaya çalıştığımızda filitreleme bizi engelliyor ve sayfaya giriş yapamıyoruz.

image

Bloklandık fakat bunu da manipüle edebileceğim. BurpSuite paket yakalamayı başlattıktan sonra tekrar Live Chat e basıyorum ve her paketin altına aşağıdaki gibi yazıyoruz.

image

 

image

Yukarıdaki gibi paketi gördüğümüzde manipüle etmiş oluyoruz ve aşağıdaki gibi chat in tekrar başladığını görüyoruz.

image

Sohbet başladığı için tekrar kod göndermeyi deneyebilirim

Şimdi filitrelemeye takılmamak için büyük küçük harfe karşı duyarlılığı var mı onu test edeceğiz ve kodumuz aşağıdaki gibi olacak:

{"message":"<img src=x oNeRrOr=alert`allsafe`>"}

Bu şekilde gönderdiğimizde başarılı olduk. 

image

Bu labaratuvardaki asıl nokta 

X-Forwarded-For: 1.1.1.1 ile ip taklidi yaparak el sıkışma işlemini gerçekleştirmemiz ve teste devam etmemizdi.

 

 

 

Peki Gerçek Web Sitelerinde Labaratuvarlardaki Gibi Çıkar Mı?

Evet mümkün, labaratuvarda gördüklerimiz dışında örneğin bi kodu çeşitli encoding yöntemiyle göndermeyi deneyebiliriz. CSRF saldırıları ,sql sorguları gibi bir çok saldırı yöntemini test edebiliriz.

 

 

 

Birkaç Örnek WebSockets Vulnerability Raporları

https://hackerone.com/reports/535436

https://hackerone.com/reports/470003

https://hackerone.com/reports/409701